home *** CD-ROM | disk | FTP | other *** search
/ Programming in Microsoft Windows with C# / Programacion en Microsoft Windows con C#.iso / Codigo / Metarchivos / MetafileViewer / MetafileViewer.cs next >
Encoding:
Text File  |  2002-05-27  |  6.4 KB  |  185 lines

  1. //---------------------------------------------
  2. // MetafileViewer.cs ⌐ 2001 by Charles Petzold
  3. //---------------------------------------------
  4. using System;
  5. using System.Drawing;
  6. using System.Drawing.Imaging;
  7. using System.Drawing.Printing;
  8. using System.IO;              // Para la clase Path 
  9. using System.Windows.Forms;
  10.  
  11. class MetafileViewer: Form
  12. {
  13.      protected Metafile mf;
  14.      protected string   strProgName;
  15.      protected string   strFileName;
  16.      MenuItem           miFileSaveAs, miFilePrint, 
  17.                         miFileProps, miViewChecked;
  18.  
  19.      public static void Main()
  20.      {
  21.           Application.Run(new MetafileViewer());
  22.      }
  23.      public MetafileViewer()
  24.      {
  25.           Text = strProgName = "Visor de metarchivos";
  26.           ResizeRedraw = true;
  27.  
  28.           Menu = new MainMenu();
  29.  
  30.                // Men· Archivo
  31.  
  32.           MenuItem mi = new MenuItem("&Archivo");
  33.           mi.Popup += new EventHandler(MenuFileOnPopup);
  34.           Menu.MenuItems.Add(mi);
  35.  
  36.                // Elemento de men· Archivo Abrir
  37.  
  38.           mi = new MenuItem("&Abrir...");
  39.           mi.Click += new EventHandler(MenuFileOpenOnClick);
  40.           mi.Shortcut = Shortcut.CtrlO;
  41.           Menu.MenuItems[0].MenuItems.Add(mi);
  42.  
  43.                // Elemento de men· Archivo Guardar como mapa de bits
  44.  
  45.           miFileSaveAs = new MenuItem("&Guardar como mapa de bits...");
  46.           miFileSaveAs.Click += new EventHandler(MenuFileSaveAsOnClick);
  47.           Menu.MenuItems[0].MenuItems.Add(miFileSaveAs);
  48.           Menu.MenuItems[0].MenuItems.Add("-");
  49.  
  50.                // Elemento de men· Archivo Imprimir
  51.  
  52.           miFilePrint = new MenuItem("&Imprimir...");
  53.           miFilePrint.Click += new EventHandler(MenuFilePrintOnClick);
  54.           Menu.MenuItems[0].MenuItems.Add(miFilePrint);
  55.           Menu.MenuItems[0].MenuItems.Add("-");
  56.  
  57.                // Elemento de men· Archivo Propiedades
  58.  
  59.           miFileProps = new MenuItem("&Propiedades...");
  60.           miFileProps.Click += new EventHandler(MenuFilePropsOnClick);
  61.           Menu.MenuItems[0].MenuItems.Add(miFileProps);
  62.  
  63.                // Men· Edici≤n (temporal hasta el Capφtulo 24)
  64.  
  65.           Menu.MenuItems.Add("&Edici≤n");
  66.  
  67.                // Men· Ver
  68.  
  69.           Menu.MenuItems.Add("&Ver");
  70.  
  71.           string[] astr = { "&Ajustado a la ventana", // $$
  72.                             "Tama±o &mΘtrico", "Tama±o en &pφxeles" };
  73.           EventHandler eh = new EventHandler(MenuViewOnClick);
  74.  
  75.           foreach (string str in astr)
  76.                Menu.MenuItems[2].MenuItems.Add(str, eh);
  77.  
  78.           miViewChecked = Menu.MenuItems[2].MenuItems[0];
  79.           miViewChecked.Checked = true;
  80.      }
  81.      void MenuFileOnPopup(object obj, EventArgs ea)
  82.      {
  83.           miFileSaveAs.Enabled = 
  84.           miFilePrint.Enabled =  
  85.           miFileProps.Enabled = (mf != null);
  86.      }
  87.      void MenuFileOpenOnClick(object obj, EventArgs ea)
  88.      {
  89.           OpenFileDialog dlg = new OpenFileDialog();
  90.     
  91.           dlg.InitialDirectory = "c:\\";
  92.           
  93.           dlg.Filter = "Todos los metarchivos|*.wmf;*.emf|" +
  94.                        "Metarchivo de Windows (*.wmf)|*.wmf|" +
  95.                        "Metarchivo mejorado (*.emf)|*.emf|" +
  96.                        "Todos los archivos|*.*";
  97.  
  98.           if (dlg.ShowDialog() == DialogResult.OK)
  99.           {
  100.                try
  101.                {
  102.                     mf = new Metafile(dlg.FileName);
  103.                }
  104.                catch (Exception exc)
  105.                {
  106.                     MessageBox.Show(exc.Message, strProgName);
  107.                     return;
  108.                }
  109.                strFileName = dlg.FileName;
  110.                Text = strProgName + " - " + Path.GetFileName(strFileName);
  111.                Invalidate();
  112.           }
  113.      }
  114.      protected virtual void MenuFileSaveAsOnClick(object obj, EventArgs ea)
  115.      {
  116.           MessageBox.Show("íSin implementar todavφa!", strProgName);
  117.      }
  118.      void MenuFilePrintOnClick(object obj, EventArgs ea)
  119.      {
  120.           PrintDocument prndoc = new PrintDocument();
  121.  
  122.           prndoc.DocumentName = Text;
  123.           prndoc.PrintPage += new PrintPageEventHandler(OnPrintPage);
  124.           prndoc.Print();
  125.      }
  126.      void MenuFilePropsOnClick(object obj, EventArgs ea)
  127.      {
  128.           MetafileHeader mh = mf.GetMetafileHeader();
  129.  
  130.           string str = 
  131.                "Propiedades de la imagen" +
  132.                "\n\tSize = " + mf.Size + 
  133.                "\n\tHorizontal Resolution = " + mf.HorizontalResolution +
  134.                "\n\tVertical Resolution = " + mf.VerticalResolution +
  135.                "\n\tPhysical Dimension = " + mf.PhysicalDimension +
  136.                "\n\nPropiedades de la cabecera del metarchivo" +
  137.                "\n\tBounds = " + mh.Bounds +
  138.                "\n\tDpiX = " + mh.DpiX +
  139.                "\n\tDpiY = " + mh.DpiY +
  140.                "\n\tLogicalDpiX = " + mh.LogicalDpiX +
  141.                "\n\tLogicalDpiY = " + mh.LogicalDpiY +
  142.                "\n\tType = " + mh.Type +
  143.                "\n\tVersion = " + mh.Version +
  144.                "\n\tMetafileSize = " + mh.MetafileSize;
  145.  
  146.           MessageBox.Show(str, Text);
  147.      }
  148.      void MenuViewOnClick(object obj, EventArgs ea)
  149.      {
  150.           miViewChecked.Checked = false;
  151.           miViewChecked = (MenuItem) obj;
  152.           miViewChecked.Checked = true;
  153.           Invalidate();
  154.      }
  155.      void OnPrintPage(object obj, PrintPageEventArgs ppea)
  156.      {
  157.           Graphics  grfx = ppea.Graphics;
  158.           Rectangle rect = new Rectangle(
  159.                ppea.MarginBounds.Left -
  160.                (ppea.PageBounds.Width - 
  161.                     (int) grfx.VisibleClipBounds.Width) / 2,
  162.                ppea.MarginBounds.Top -
  163.                (ppea.PageBounds.Height - 
  164.                     (int) grfx.VisibleClipBounds.Height) / 2,
  165.                ppea.MarginBounds.Width,
  166.                ppea.MarginBounds.Height);
  167.  
  168.           DisplayMetafile(grfx, rect);
  169.      }
  170.      protected override void OnPaint(PaintEventArgs pea)
  171.      {
  172.           if (mf != null)
  173.                DisplayMetafile(pea.Graphics, ClientRectangle);
  174.      }
  175.      void DisplayMetafile(Graphics grfx, Rectangle rect)
  176.      {
  177.           switch (miViewChecked.Index)
  178.           {
  179.           case 0: grfx.DrawImage(mf, rect);  break;
  180.           case 1: grfx.DrawImage(mf, rect.X, rect.Y);  break;
  181.           case 2: grfx.DrawImage(mf, rect.X, rect.Y, mf.Width, mf.Height);
  182.                   break;
  183.           }
  184.      }
  185. }